#include <iostream>
#include <memory>
#include <string>
#include <sstream>
#include <jsoncpp/json/json.h>

// int main()
// {
//     const char *name = "刘成龙";
//     int age = 25;
//     float score[] = {88.5, 98, 58};
//     Json::Value val;
//     val["姓名"] = name;
//     val["年龄"] = age;
//     val["成绩"].append(score[0]);
//     val["成绩"].append(score[1]);
//     val["成绩"].append(score[2]);
//     Json::StreamWriterBuilder swb;
//     std::unique_ptr<Json::StreamWriter> sw_up(swb.newStreamWriter());
//     std::ostringstream os;
//     sw_up->write(val, &os);
//     std::string str = os.str();
//     std::cout << str << std::endl;
//     return 0;
// }

int main()
{
    std::string str = R"({"姓名":"刘宇龙", "年龄":25, "成绩":[76.5, 55, 88]})";
    Json::Value root;
    Json::CharReaderBuilder crb;
    std::unique_ptr<Json::CharReader> cr_up(crb.newCharReader());
    std::string err;
    bool ret = cr_up->parse(str.c_str(), str.c_str() + str.size(), &root, &err);
    if(ret == false)
    {
        std::cout << "parse err" << std::endl;
        return -1;
    }
    std::cout << root["姓名"].asString() << std::endl;
    std::cout << root["年龄"].asInt() << std::endl;
    // int sz = root["成绩"].size();
    // for (int i = 0; i < sz; i++)
    // {
    //     std::cout << root["成绩"][i].asFloat() << std::endl;
    // }
    for (auto it = root["成绩"].begin(); it != root["成绩"].end(); it++)
    {
        std::cout << it->asFloat() << std::endl;
    }
    return 0;
}
